package com.ato.MyCollection;

import java.util.*;

/**
 * @author wangjing
 * @create 2021--11--04--21:26
 * <p>
 * <p>
 * Collection接口   ： 单列集合，用来存储一个一个的对象
 * List : 有序的，可以重复的     亦可称之为动态数据：
 * ArrayList  LinkedList Vector
 * Set  ：无序的，不可重复的
 * HashSet LinkedSet  TreeSet
 * Map接口：双列集合：key-value 组合
 * HashMap  LinkedMap TreeMap  HashTable Properties
 */
public class CollectionTest {
    public static void main(String[] args) {
        Collection coll = new ArrayList();
        coll.add("aa");
        coll.add(123);
        coll.add(new People("Sid", 27));
        System.out.println("添加的元素的长度" + coll.size());
        Collection coll2 = new ArrayList();
        coll.add("addAll(Collection<? extends E>) 参数也是一个集合");
        coll.addAll(coll2);
        System.out.println(coll.toString());
        System.out.println("判断当前集合是否为空：是否有元素 : coll.isEmpty() " + coll.isEmpty());
//        coll.clear();
        System.out.println("清空集合：只是数据没有了，对象还在， : coll.isEmpty() ");
        boolean contains = coll.contains(new People("Sid", 27));
        System.out.println("coll.contains(Object o)集合中是否包含了某个对象：该方法判断的是内容，不是内存地址，比的是equals() ：" + contains);
        /*
         * 由于String是重写了的，所以 及时 coll.add(new String("123"));coll.contains(new String("123")); true
         * 但是         coll.add(new People("Sid", 27));
         *               coll.contains(new People("Sid", 27)); 没重写时，是false，重写了equals是true
         * 如果是自己写的class ，那么 需要在自定义class里重写 equals() idea可生成。
         *
         *   注意： 比的时候是按照 你ArrayList里有几个内容就比几次，但是，要比较的obj匹配到了，它就不在继续了。
         *
         *   像Collection接口中添加数据时，如果添加的是自定义类， 需要重写equals
         *
         * */
        Collection c1 = Arrays.asList(123, 456);
        System.out.println("c1.containsAll(coll) 是否包含所有 " + c1.containsAll(coll));

        System.out.println("*********");
        /*
       boolean remove(Object o)
         移除某个元素，返回boolean，注意，这里是先匹配有没有，由于自带的类都重写过，而自定义的没有重写过，所有下方的返回false。也印证了上面的：
            像Collection接口中添加数据时，如果添加的是自定义类， 需要重写equals
        * */
        System.out.println(coll.remove(new People("Sid", 27)));
        Collection co1 = new ArrayList();
        co1.add(123);
        co1.add(456);
        co1.add(789);
        Collection co2 = new ArrayList();
        co2.add(123);
        co2.add(789);
//        System.out.println(co1.removeAll(co2));
//        System.out.println(co1);
//        System.out.println(co1.retainAll(co2));
        System.out.println(co1);
        System.out.println(co1.equals(co2));
        System.out.println("xxxxxxxxxxx集合转换为数组xxxxxxxxxxxxxxxxx");
        Object[] objects = co1.toArray();
        for (int i = 0; i < objects.length; i++) {
            System.out.println(objects[i]);
        }
        String[] arr = new String[]{"aa", "bb", "cc"};
        List<String> strings = Arrays.asList(arr);
        System.out.println(strings);
        List<Integer> integers = Arrays.asList(1, 2, 3);

    }
}

class People implements Comparable {
//    @Override
//    public boolean equals(Object o) {
//        if (this == o) return true;
//        if (o == null || getClass() != o.getClass()) return false;
//        People people = (People) o;
//        return age == people.age && Objects.equals(name, people.name);
//    }
//
//    @Override
//    public int hashCode() {
//        return Objects.hash(name, age);
//    }

    private String name;
    private int age;

    public People() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Object o) {
        if (o instanceof People) {
            People p1 = (People) o;
            int i = this.name.compareTo(p1.name);
            if (i == 0) {
                return Integer.compare(this.age, p1.age);
            }
            return i;
        } else {
            throw new RuntimeException("输入类型不正确");
        }
    }
}